<?php
//   +----------------------------------------------------------------------
//   | Copyright (c) 2015-2035 http://www.hdphp.cn All rights reserved.
//   | Licensed ( http://www.hdphp.cn/licenses/ )
//   | Author: Jack <sophia2152@qq.com>
//   | 官方网址: http://www.hdphp.cn
//   | 这不是一个自由软件！您只能在不用于商业目的的前提下对程序代码进行修改和使用。
//   | 任何企业和个人不允许对程序代码以任何形式任何目的再发布。
//   +----------------------------------------------------------------------

use think\facade\Log;
use think\facade\Config;
use think\exception\ValidateException;
use Fastknife\Service\ClickWordCaptchaService;
use Fastknife\Service\BlockPuzzleCaptchaService;

// 应用公共文件

if (!function_exists('p')) {
    /**
     * 注释：打印函数
     * 创建人：Jack
     * 创建时间：2023/3/20 17:20
     * @param $arr
     * @return void
     */
    function p($arr)
    {
        echo '<pre>' . print_r($arr, true) . '</pre>';
    }
}


if (!function_exists('aj_captcha_check_one')) {
    /**
     * 注释：验证滑块1次验证
     * 创建人：Jack
     * 创建时间：2023/3/23 17:28
     * @param string $captchaType
     * @param string $token
     * @param string $pointJson
     * @return true
     */
    function aj_captcha_check_one(string $captchaType, string $token, string $pointJson)
    {
        aj_get_serevice($captchaType)->check($token, $pointJson);
        return true;
    }
}

if (!function_exists('aj_captcha_check_two')) {
    /**
     * 注释：验证滑块2次验证
     * 创建人：Jack
     * 创建时间：2023/3/23 17:28
     * @param string $captchaType
     * @param string $captchaVerification
     * @return true
     */
    function aj_captcha_check_two(string $captchaType, string $captchaVerification)
    {
        aj_get_serevice($captchaType)->verificationByEncryptCode($captchaVerification);
        return true;
    }
}

if (!function_exists('aj_captcha_create')) {
    /**
     * 注释：创建验证码
     * 创建人：Jack
     * 创建时间：2023/3/23 17:28
     * @param string $captchaType
     * @return array
     */
    function aj_captcha_create(string $captchaType)
    {
        return aj_get_serevice($captchaType)->get();
    }
}

if (!function_exists('aj_get_serevice')) {
    /**
     * 注释：aj_get_serevice
     * 创建人：Jack
     * 创建时间：2023/3/23 17:28
     * @param string $captchaType
     * @return BlockPuzzleCaptchaService|ClickWordCaptchaService
     */
    function aj_get_serevice(string $captchaType)
    {
        $config = Config::get('ajcaptcha');
        switch ($captchaType) {
            case "clickWord":
                $service = new ClickWordCaptchaService($config);
                break;
            case "blockPuzzle":
                $service = new BlockPuzzleCaptchaService($config);
                break;
            default:
                throw new ValidateException('captchaType missing');
        }
        return $service;
    }
}

if (!function_exists('response_log_write')) {
    /**
     * 注释：日志写入
     * 创建人：Jack
     * 创建时间：2023/3/23 11:36
     * @param array $data
     * @param string $type
     * @return void
     */
    function response_log_write(array $data, string $type = \think\Log::ERROR)
    {
        try {
            $id = 0;
            foreach (['adminId', 'kefuId', 'uid', 'supplierId'] as $value) {
                if (request()->hasMacro($value)) {
                    $id = request()->{$value}();
                }
            }
            // 日志内容
            $log = [
                $id,                                                                                     // 管理员ID
                request()->ip(),                                                                         // 客户ip
                ceil(msectime() - (request()->time(true) * 1000)),                                 // 耗时（毫秒）
                request()->method(true),                                                                 // 请求类型
                str_replace("/", "", request()->rootUrl()),                               // 应用
                request()->baseUrl(),                                                                    // 路由
                json_encode(request()->param(), JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES),   // 请求参数
                json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES),                // 报错数据
            ];

            Log::write(implode("|", $log), $type);
        } catch (\Throwable $e) {

        }
    }
}
